/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Model.PessoaModel;
import Utils.HibernateUtil;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.hibernate.*;

/**
 *
 * @author Thiago
 */
public class PessoaDaoImp implements PessoaDao {

    /**
     * @description Salva um pessoa
     * @param pessoa (objeto pessoa)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void save(PessoaModel pessoa) {
        try {
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(pessoa);
            session.getTransaction().commit();
        } catch (Exception ex) {
            String erro = ex.getMessage();
        }
    }
    
    /**
     * @description remove um pessoa
     * @param pessoa (objeto pessoa)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void remove(PessoaModel pessoa) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        session.delete(pessoa);
        session.getTransaction().commit();
    }

    /**
     * @description altera um pessoa
     * @param pessoa (objeto pessoa)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void update(PessoaModel pessoa) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        session.update(pessoa);
        session.getTransaction().commit();
    }

    /**
     * @description busca um pessoa
     * @param id (identiificador do pessoa)
     * @return PessoaModel (objeto pessoa)
     * @author Thiago Cezar Silverio
     */
    public PessoaModel getPessoa(int id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (PessoaModel) session.load(PessoaModel.class, id);
    }

    /**
     * @description busca todos os pessoa
     * @param
     * @return lista (lista de objetos pessoa)
     * @author Thiago Cezar Silverio
     */
    public List<PessoaModel> getTodos(int tipoPessoa) {
        List<PessoaModel> listaFornecedor = new ArrayList<PessoaModel>();
        PessoaDao dao = new PessoaDaoImp();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        //List query = session.createSQLQuery("select idpessoa from pessoa").list();
        List query = session.createSQLQuery("select pes.idpessoa from pessoa pes where pes.idtipopessoa = :tipoPessoa").setParameter("tipoPessoa", tipoPessoa).list();
        // obtém as pessoas contidos no Vector
        for (int i = 0; i < query.size(); i++) {
            String valor = query.get(i).toString();
            listaFornecedor.add(dao.getPessoa(Integer.parseInt(valor)));
        }
        return listaFornecedor;
    }
}
